#include "sprite_anim.h"

SpriteAnim *SpriteAnim::addSpriteAnimChild(ObjectScreen *parent, const std::string &file_path, float scale,Anchor anchor)
{
    const auto sprite_anim = new SpriteAnim();         // 创建精灵动画对象
    sprite_anim->init();                         // 初始化
    sprite_anim->setTexture(Texture(file_path)); // 设置纹理
    sprite_anim->setScale(scale);                // 设置缩放
    sprite_anim->setParent(parent);              // 设置父对象
    parent->addChild(sprite_anim);               // 添加到父对象
    return sprite_anim;
}

void SpriteAnim::update(float dt)
{
    if (is_finished_){return;}
    frame_timer_ += dt;              // 更新帧计时器
    if (frame_timer_ >= 1.0f / fps_) // 如果帧计时器大于等于帧率
    {
        current_frame_++; // 更新当前帧
        if (current_frame_ >= total_frame_)
        {
            if (!is_loop_) {
                is_finished_ = true;
            }
            current_frame_ = 0; // 重置当前帧
        }
        frame_timer_ = 0.0f; // 重置帧计时器
    }
    texture_.src_rect.x = current_frame_ * texture_.src_rect.w; // 更新纹理源矩形
}
void SpriteAnim::setTexture(const Texture &texture)
{
    texture_ = texture;                                                         // 设置纹理
    total_frame_ = static_cast<int>(texture_.src_rect.w / texture_.src_rect.h); // 设置总帧数
    texture_.src_rect.w = texture_.src_rect.h;                                  // 设置纹理源矩形宽度
    size_ = glm::vec2(texture_.src_rect.w, texture_.src_rect.h);                // 设置大小
}